java实现迷宫问题
方向上有一些问题,应该是递归出现的问题,没有解决
package athu;
import java.util.Scanner;
import org.junit.jupiter.api.Test;
/**
* 迷宫问题的java实现
* @author
*
*/
public class Maze {
final static int m=2,n=2;
//四个方向的移动表
int[][] move= {{-1,0,'N'},{0,1,'E'},{1,0,'S'},{0,-1,'W'}};
//访问标记数组
int[][] mark=new int[m+2][n+2];
char dir=0;
@Test
public void test() {
int p,q;
Scanner scanner=null;
//迷宫定义
int[][] maze=new int[m+2][n+2];
//输入迷宫数据
for(int i=0;i<m+2;i++) {
for(int j=0;j<n+2;j++) {
scanner=new Scanner(System.in);
maze[i][j]=scanner.nextInt();
}
}
System.out.println("请输入出口坐标:");
p=scanner.nextInt();
q=scanner.nextInt();
//初始化标记数组
for(int i=0;i<m+2;i++) {
for(int j=0;j<n+2;j++) {
mark[i][j]=0;
}
}
//从入口(1,1)开始
mark[1][1]=1;
//递归算法返回1表示成功返回
if(seekPath(maze,1,1,p,q)==1) {
System.out.println("("+1+","+1+")->"+dir+","+"成功");
}
}
private int seekPath(int[][] maze, int x, int y, int p, int q) {
//用g,h记录位置信息,dir记录方向
int g,h;
//已到出口
if(x==p&&y==q) {
return 1;
}
//依次按每个方向寻找通向出口的路径
for(int i=0;i<4;i++) {
//找下一位置和方向
g = move[i][0]+x;
h = move[i][1]+y;
dir=(char) move[i][2];
//下一位置可通,试探该方向
if(maze[g][h]!=1&&mark[g][h]!=1) {
mark[g][h]=1;
if(seekPath(maze,g,h,p,q)==1) {
System.out.print("("+g+","+h+")->"+dir+",");
return 1;
}
}
}
if(x==1&&y==1) {
System.out.println("no path in maze!");
}
return 0;
}
}